对动态数量的图像应用滚动平均

简短说明

文件: \examples\Processing\Loop\RollingAverage\rollingAverage_Loop.vad

默认平台: imaFlex CXP-12 Quad

简要说明

在不引入帧延迟的情况下,在运行中的图像流上实现滚动平均。 计算最后 N 张单色图像的平均值,并用于以彩色可视化与当前图像的差分结果。 用于构建平均值的图像数量默认设为 128,但可以修改。

此设计将展示滚动平均的工作原理。 但核心要素是一个能够实现更多应用和机器视觉操作的循环(Loop)。 为了解循环的工作原理及其实现方式,此示例是一个完美的起点。

算法

计算每个单像素的平均值,并将其归一化到 8 bit 的输入值范围内。 为此,将接收到的每一帧与其前序帧相加,并除以接收到的帧数。 当达到滚动平均序列的长度时,总和将减去已存储且延迟的帧。 通过这种方式,从第一幅图像开始便会生成输出图像。

在此设计中,有两个条件定义了滚动平均序列的长度。 这两个值都称为 N_rolling,且需要设置为相同的值。 一个用于处理减法图像的延迟存储过程,另一个用于像素值归一化。

使用的循环

使用算子 RxImageLink 和 TxImageLink 来支持循环处理。 输入图像序列的未归一化平均和在一个循环中处理。 需要第二个循环处理来存储输入的帧,以便后续减去其值。 每个循环都必须与输入的相机帧同步。 这会引入一个需要满足启动条件的 SYNC 算子。 启动条件本身由 InsertImage 处理,在首次运行时引入一个单一的最小帧。 所使用的 SYNC 将帧尺寸最大化至所需值。

由于平均处理需要存储一定数量的帧,因此使用了 ImageBufferMultiRoiDyn 算子。 除了满足由生成的最小帧达到的同步目的外,最初的图像也会被直接存储。

使用 VA 仿真将有助于深入了解围绕 SYNC 的工作原理。 通常,一系列人工生成的最小帧可实现同步。

可视化

实现了两种不同的可视化方式。第一种将生成一个 24 bit 的 RGB 图像,其中:

  • 通道 - 内容
  • 红色 (RED) - 当前图像
  • 绿色 (GREEN) - 平均图像
  • 蓝色 (BLUE) - 差分图像

第二种方法基于 HSL 色彩空间,随后会转换为 24 bit RGB:

  • 通道 - 内容
  • 色相 (HUE) / 色彩角度 - 差分图像,其中最小值为绿色
  • 饱和度 (SATURATION) - 设为最大值
  • 亮度 (LIGHTNESS) - 当前图像

第二种方法通过 EffectEnable = 1 开启。 可以将动态增益因子用于所有色相角度的差分 Scaling。

VisualApplets 设计

示例“rollingAverage_Loop.vad”专为基准配置下的单色 CameraLink 相机而设计,其分辨率 为 1024x1024,每个像素 8 bit。

仿真数据

示例“rollingAverage_Loop.vad”文件夹 %VASINSTALLDIR%\examples\Processing\Advanced\RollingAverage\street_sequence*.jpg 包含了一系列用于模拟的有用图像。 为了减少数据量,使用了有损压缩格式。